Use the slice allocater for GtkTreeDataSortHeader.
authorMatthias Clasen <mclasen@redhat.com>
Thu, 29 Dec 2005 05:26:09 +0000 (05:26 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 29 Dec 2005 05:26:09 +0000 (05:26 +0000)
2005-12-29  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtktreedatalist.c: Use the slice allocater for
GtkTreeDataSortHeader.

* gtk/gtktreedatalist.h:
* gtk/gtktreedatalist.c (_gtk_tree_data_list_set_header): New function.

* gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_sort_func):
* gtk/gtkliststore.c (gtk_list_store_set_sort_func):
* gtk/gtktreestore.c (gtk_tree_store_set_sort_func): Use it here.

ChangeLog
ChangeLog.pre-2-10
gtk/gtkliststore.c
gtk/gtktreedatalist.c
gtk/gtktreedatalist.h
gtk/gtktreemodelsort.c
gtk/gtktreestore.c

index 1d4dcff26f44e60204336436f7c19d6b3e62206b..f3e10223a7b724fa63aa023bcd64024af7b30f9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-12-29  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtktreedatalist.c: Use the slice allocater for 
+       GtkTreeDataSortHeader.
+
+       * gtk/gtktreedatalist.h: 
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_set_header): New function.
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_sort_func): 
+       * gtk/gtkliststore.c (gtk_list_store_set_sort_func): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_sort_func): Use it here.
+
 2005-12-27  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkbindings.h (GtkBindingSignal): 
index 1d4dcff26f44e60204336436f7c19d6b3e62206b..f3e10223a7b724fa63aa023bcd64024af7b30f9d 100644 (file)
@@ -1,3 +1,15 @@
+2005-12-29  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtktreedatalist.c: Use the slice allocater for 
+       GtkTreeDataSortHeader.
+
+       * gtk/gtktreedatalist.h: 
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_set_header): New function.
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_sort_func): 
+       * gtk/gtkliststore.c (gtk_list_store_set_sort_func): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_sort_func): Use it here.
+
 2005-12-27  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkbindings.h (GtkBindingSignal): 
index 29d28fbc3bd88e5cda179e970d1cea87229b8ef1..43a6bc7142a6bf6059a9f73a16b39e2c998e3a18 100644 (file)
@@ -1801,7 +1801,8 @@ gtk_list_store_set_sort_column_id (GtkTreeSortable  *sortable,
        {
          GtkTreeDataSortHeader *header = NULL;
 
-         header = _gtk_tree_data_list_get_header (list_store->sort_list, sort_column_id);
+         header = _gtk_tree_data_list_get_header (list_store->sort_list, 
+                                                  sort_column_id);
 
          /* We want to make sure that we have a function */
          g_return_if_fail (header != NULL);
@@ -1836,36 +1837,9 @@ gtk_list_store_set_sort_func (GtkTreeSortable        *sortable,
   g_return_if_fail (GTK_IS_LIST_STORE (sortable));
   g_return_if_fail (func != NULL);
 
-  for (list = list_store->sort_list; list; list = list->next)
-    {
-      GtkTreeDataSortHeader *list_header;
-
-      list_header = (GtkTreeDataSortHeader*) list->data;
-      if (list_header->sort_column_id == sort_column_id)
-       {
-         header = list_header;
-         break;
-       }
-    }
-
-  if (header == NULL)
-    {
-      header = g_new0 (GtkTreeDataSortHeader, 1);
-      header->sort_column_id = sort_column_id;
-      list_store->sort_list = g_list_append (list_store->sort_list, header);
-    }
-
-  if (header->destroy)
-    {
-      GtkDestroyNotify d = header->destroy;
-
-      header->destroy = NULL;
-      d (header->data);
-    }
-
-  header->func = func;
-  header->data = data;
-  header->destroy = destroy;
+  list_store->sort_list = _gtk_tree_data_list_set_header (list_store->sort_list, 
+                                                         sort_column_id, 
+                                                         func, data, destroy);
 
   if (list_store->sort_column_id == sort_column_id)
     gtk_list_store_sort (list_store);
index 9cbd26a7aaa4d06e2cf2815885cfb9e0e4c9cba9..02040fa4cb7b108f44250f2d655253d10086a99e 100644 (file)
@@ -462,7 +462,7 @@ _gtk_tree_data_list_header_new (gint   n_columns,
     {
       GtkTreeDataSortHeader *header;
 
-      header = g_new (GtkTreeDataSortHeader, 1);
+      header = g_slice_new (GtkTreeDataSortHeader);
 
       retval = g_list_prepend (retval, header);
       header->sort_column_id = i;
@@ -490,14 +490,14 @@ _gtk_tree_data_list_header_free (GList *list)
          d (header->data);
        }
 
-      g_free (header);
+      g_slice_free (GtkTreeDataSortHeader, header);
     }
   g_list_free (list);
 }
 
 GtkTreeDataSortHeader *
-_gtk_tree_data_list_get_header (GList *header_list,
-                               gint   sort_column_id)
+_gtk_tree_data_list_get_header (GList   *header_list,
+                               gint     sort_column_id)
 {
   GtkTreeDataSortHeader *header = NULL;
 
@@ -509,3 +509,50 @@ _gtk_tree_data_list_get_header (GList *header_list,
     }
   return NULL;
 }
+
+
+GList *
+_gtk_tree_data_list_set_header (GList                  *header_list,
+                               gint                    sort_column_id,
+                               GtkTreeIterCompareFunc  func,
+                               gpointer                data,
+                               GtkDestroyNotify        destroy)
+{
+  GList *list = header_list;
+  GtkTreeDataSortHeader *header = NULL;
+
+  for (; list; list = list->next)
+    {
+      header = (GtkTreeDataSortHeader*) list->data;
+      if (header->sort_column_id == sort_column_id)
+       break;
+      header = NULL;
+
+      if (list->next == NULL)
+       break;
+    }
+  
+  if (header == NULL)
+    {
+      header = g_slice_new0 (GtkTreeDataSortHeader);
+      header->sort_column_id = sort_column_id;
+      if (list)
+       g_list_append (list, header);
+      else
+       header_list = g_list_append (header_list, header);
+    }
+
+  if (header->destroy)
+    {
+      GtkDestroyNotify d = header->destroy;
+      
+      header->destroy = NULL;
+      d (header->data);
+    }
+  
+  header->func = func;
+  header->data = data;
+  header->destroy = destroy;
+
+  return header_list;
+}
index 247a33a355cd581967af28247b64d326a5a3f144..49a0940f4d25e81d66152a06ca532950ea1fa08e 100644 (file)
@@ -76,6 +76,10 @@ GList *                _gtk_tree_data_list_header_new  (gint          n_columns,
 void                   _gtk_tree_data_list_header_free (GList        *header_list);
 GtkTreeDataSortHeader *_gtk_tree_data_list_get_header  (GList        *header_list,
                                                        gint          sort_column_id);
-
+GList                 *_gtk_tree_data_list_set_header  (GList                  *header_list,
+                                                       gint                    sort_column_id,
+                                                       GtkTreeIterCompareFunc  func,
+                                                       gpointer                data,
+                                                       GtkDestroyNotify        destroy);
 
 #endif /* __GTK_TREE_DATA_LIST_H__ */
index 20b0f53239a5567d765dca5a8d5495e2a6368684..d7b79f76ee0919273eb818f39762bb0070a31a7a 100644 (file)
@@ -1389,43 +1389,13 @@ gtk_tree_model_sort_set_sort_func (GtkTreeSortable        *sortable,
                                   GtkDestroyNotify        destroy)
 {
   GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *) sortable;
-  GtkTreeDataSortHeader *header = NULL;
-  GList *list;
 
   g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
   g_return_if_fail (func != NULL);
 
-  for (list = tree_model_sort->sort_list; list; list = list->next)
-    {
-      GtkTreeDataSortHeader *list_header;
-
-      list_header = (GtkTreeDataSortHeader*) list->data;
-      if (list_header->sort_column_id == sort_column_id)
-       {
-         header = list_header;
-         break;
-       }
-    }
-
-  if (header == NULL)
-    {
-      header = g_new0 (GtkTreeDataSortHeader, 1);
-      header->sort_column_id = sort_column_id;
-      tree_model_sort->sort_list = g_list_append (tree_model_sort->sort_list,
-                                                 header);
-    }
-
-  if (header->destroy)
-    {
-      GtkDestroyNotify d = header->destroy;
-
-      header->destroy = NULL;
-      d (header->data);
-    }
-
-  header->func = func;
-  header->data = data;
-  header->destroy = destroy;
+  tree_model_sort->sort_list = _gtk_tree_data_list_set_header (tree_model_sort->sort_list,
+                                                              sort_column_id,
+                                                              func, data, destroy);
 
   if (tree_model_sort->sort_column_id == sort_column_id)
     gtk_tree_model_sort_sort (tree_model_sort);
index 914997ad795207dc3d6edca756db2b0d96a5a70b..1569fc273e3081b79d633dbe4b83f170b83578fc 100644 (file)
@@ -2674,7 +2674,8 @@ gtk_tree_store_sort (GtkTreeStore *tree_store)
     {
       GtkTreeDataSortHeader *header = NULL;
 
-      header = _gtk_tree_data_list_get_header (tree_store->sort_list, tree_store->sort_column_id);
+      header = _gtk_tree_data_list_get_header (tree_store->sort_list, 
+                                              tree_store->sort_column_id);
 
       /* We want to make sure that we have a function */
       g_return_if_fail (header != NULL);
@@ -2919,7 +2920,8 @@ gtk_tree_store_set_sort_column_id (GtkTreeSortable  *sortable,
        {
          GtkTreeDataSortHeader *header = NULL;
 
-         header = _gtk_tree_data_list_get_header (tree_store->sort_list, sort_column_id);
+         header = _gtk_tree_data_list_get_header (tree_store->sort_list, 
+                                                  sort_column_id);
 
          /* We want to make sure that we have a function */
          g_return_if_fail (header != NULL);
@@ -2947,42 +2949,13 @@ gtk_tree_store_set_sort_func (GtkTreeSortable        *sortable,
                              GtkDestroyNotify        destroy)
 {
   GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
-  GtkTreeDataSortHeader *header = NULL;
-  GList *list;
 
   g_return_if_fail (GTK_IS_TREE_STORE (sortable));
   g_return_if_fail (func != NULL);
 
-  for (list = tree_store->sort_list; list; list = list->next)
-    {
-      GtkTreeDataSortHeader *list_header;
-
-      list_header = (GtkTreeDataSortHeader*) list->data;
-      if (list_header->sort_column_id == sort_column_id)
-       {
-         header = list_header;
-         break;
-       }
-    }
-
-  if (header == NULL)
-    {
-      header = g_new0 (GtkTreeDataSortHeader, 1);
-      header->sort_column_id = sort_column_id;
-      tree_store->sort_list = g_list_append (tree_store->sort_list, header);
-    }
-
-  if (header->destroy)
-    {
-      GtkDestroyNotify d = header->destroy;
-
-      header->destroy = NULL;
-      d (header->data);
-    }
-
-  header->func = func;
-  header->data = data;
-  header->destroy = destroy;
+  tree_store->sort_list = _gtk_tree_data_list_set_header (tree_store->sort_list, 
+                                                         sort_column_id, 
+                                                         func, data, destroy);
 
   if (tree_store->sort_column_id == sort_column_id)
     gtk_tree_store_sort (tree_store);